package com.healthcloud.dao;

import com.healthcloud.entity.PatientRecord.PatientInfoVo;
import com.healthcloud.entity.PpPatientBaseEntity;
import com.healthcloud.entity.PpPatientBaseVo;
import com.healthcloud.entity.bloodPressureExport;
import com.healthcloud.entity.bloodSugarExport;
import com.healthcloud.utils.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 病人档案
 * 
 * @author yucl
 * @email yucailong1111@126.com
 * @date 2017-09-04 14:03:05
 */
public interface PpPatientBaseDao extends BaseDao<PpPatientBaseEntity> {

    PpPatientBaseEntity queryByIdcard(@Param("idcard") String idcard);

    PatientInfoVo SearchByIdCard(@Param("idCard") String idcard);

    void add(@Param("entity") PpPatientBaseEntity entity);

    Integer countDiseasesByIds(@Param("ids") String ids, @Param("types") String types
            , @Param("age") Integer age, @Param("sex") Integer sex);

    Integer countDiseasesByIdsTest(@Param("ids") String ids, @Param("testItemCodes") String testItemCodes, @Param("day") Integer day);

    Integer totalByHospitalIds(@Param("ids") String ids);

    Integer coutByIdsTest(@Param("ids") String ids, @Param("testItemCodes") String testItemCodes);

    Map countErrorAge(@Param("ids") String ids, @Param("testItemCodes")String testItemCodes);

    int savePatient(@Param("entity") PpPatientBaseEntity entity);

    int savePatientTemp(@Param("entity") PpPatientBaseEntity entity);

    List<PpPatientBaseVo> queryListVo(@Param("entity") PpPatientBaseVo entity, @Param("pageParam") PageParam pageParam);

    int queryTotalVo(@Param("entity") PpPatientBaseVo entity);

    /**
     * 获取病人最大id
     */
    Integer getMaxId();

    /**
     * 查询 最近一次测量的高压 104001 对应测量值 >= 135 的身份证号列表
     * @param hospIds
     * @return
     */
    List<String> listError135BpIdCards(@Param("hospIds") String hospIds);

    /**
     * 查询 最近一次测量的低压 104002 对应测量值 >= 85 的身份证号列表
     * @param hospIds
     * @return
     */
    List<String> listError85BpIdCards(@Param("hospIds") String hospIds);

    List<String> listErrorBsIdCards(
            @Param("hospIds") String hospIds,
            @Param("testItemCode") String testItemCode,
            @Param("standardValue") Integer standardValue
    );

    /**
     * 查询 最近一次测量的血糖 105002 餐后2小时血糖 对应测量值 >= 10.0 的身份证号列表
     * @param hospIds
     * @return
     */
    List<String> listError10BsIdCards(@Param("hospIds") String hospIds);

    /**
     * 血糖测量总人数
     * @param hospIds
     * @return
     */
    int countBsIdCardNum(@Param("hospIds") String hospIds);

    /**
     * 修改血压信息
     * @param entity
     */
    void updateBpInfo(@Param("entity") PpPatientBaseEntity entity);

    /**
     * 根据身份证号、hospitalId，查询 pp_patient_base 患者表中是否已有记录
     * @param idCard
     * @param hospitalId
     * @return
     */
    int countByIdCardAndHospitalId(@Param("idCard") String idCard, @Param("hospitalId") Long hospitalId);

    /**
     * 根据身份证号，修改骨松分级
     * @param blType 骨松分级
     * @param idCard 身份证号
     */
    void updateBlTypeByIdCard(@Param("blType") Integer blType, @Param("idCard") String idCard);

    /**
     * 修改病人身份证号
     * @param oldIdCard 修改前身份证号
     * @param newIdCard 修改后身份证号
     */
    void updateIdCard(@Param("newIdCard") String newIdCard, @Param("oldIdCard") String oldIdCard);

    List<bloodPressureExport> querybloodPressureExport(@Param("entity") PpPatientBaseVo entity);

    List<bloodSugarExport> querybloodSugarExport(@Param("entity") PpPatientBaseVo entity);
}